package com.jxtc.enterprise.common.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.time.LocalDateTime;

@Getter
@Setter
@ToString
@TableName(value = "delivery_task_t")
public class DeliveryTask {
    /**
     * 主键，配送任务 ID
     */
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;

    /**
     * 配送任务模板 ID
     */
    private String taskTemplateId;

    /**
     * 该配送任务所属的租户 ID，与 delivery_task_template 表中的租户 ID 冗余，方便查询时少 JOIN 一次
     */
    private String tenantId;

    /**
     * 配送员 ID
     */
    private String riderId;

    /**
     * 配送日期，yyyy-MM-dd 格式字符串
     */
    private String deliveryDate;

    /**
     * 送餐开始时间，HH:mm:ss 格式字符串
     */
    private String deliveryStartTime;

    /**
     * 配送费用类型，取值如下：
     * - 每单结算
     * - 百分比结算
     * - 包干
     */
    private String deliveryCostType;

    /**
     * 配送费用金额或比例，金额按 "分" 为单位保存，百分比按 % 号前的数值保存
     */
    private Integer deliveryCostValue;

    /**
     * 配送顺序，值越大优先级越高
     */
    private Integer deliveryOrder;

    /**
     * 当日配送任务的订单数量
     */
    private Integer orderCount;

    /**
     * 当日配送任务订单金额，单位：分
     */
    private Integer orderAmount;

    /**
     * 费用加项，单位：分
     */
    private Integer additionalFee;

    /**
     * 扣除费用，单位：分
     */
    private Integer deductFee;

    /**
     * 该配送任务的总费用，计算规则：根据配送费用类型计算的金额 + 费用加项 - 扣除费用
     */
    private Integer totalFee;

    /**
     * 配送任务状态，1：未完成；2：已完成
     */
    private Integer deliveryStatus;

    /**
     * 配送费用结算状态，1：未结算；2：已结算
     */
    private Integer settlementStatus;

    /**
     * 结算凭证图片链接列表，JSONArray 格式字符串
     */
    private String proofImages;

    /**
     * 结算备注信息
     */
    private String note;

    /**
     * 软删除标记，1 表示已删除，0 表示未删除
     */
    private Boolean delFlag;

    /**
     * 创建时间，在创建时默认传值，不需要手动操作
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间，在更新时默认传值，不需要手动操作
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
